package mylog

import (
	"github.com/EnzoLwb/cuslog"
	"go.uber.org/zap"
)

func SetUp() {
	var (
		lvl zap.AtomicLevel
	)

	//为什么要设置Atomic的级别 因为这样我们可以通过http方式进行修改，具体demo可看我的cuslog库 demo
	lvl = zap.NewAtomicLevel()

	//设置默认的日志级别 : "debug", "info", "warn", "error", "panic", and "fatal".
	lvl.UnmarshalText([]byte("warn"))

	// 有很多配置 可查看
	opts := &cuslog.Options{
		//输出级别 低于这个级别就不记录了哈
		AtomicLevel: lvl,
		// 输出格式 json|console
		Formatter: "json",
		// 是否支持控制台的颜色输出，一般有文件的输出就不要这个了，因为会显示错乱
		EnableColor: false,
		// 是否支持堆栈信息
		DisableCaller: true,
		// 输出地址 文件或者stdout
		OutputPaths: []string{"runtime/logs/cuslog.log"},
		// 内部error 非error级别日志
		ErrorOutputPaths: []string{"./runtime/logs/error.log"},
		// 每条日志可以记录额外的字段
		InitialFields: map[string]interface{}{
			"cluster":  "cluster_1",
			"database": "redis",
		},
	}

	// 初始化全局logger
	cuslog.Init(opts)
	defer cuslog.Flush()

	/*
		// Debug、Info(with field)、Warnf、Errorw的使用 和zap一样
			log.Debug("This is a debug message")
			log.Info("This is a info message",
				log.Int32("int_key", 10),
				log.String("gopher", "go+php"),
				log.Err(errors.New("panic something")),
			) //Logger

		//sugaredLogger
		log.Warnf("This is a formatted %s message", "warn") //这种format的写法 在ide中是没有颜色提示的，而且性能不是最好，所以不建议此写法。

		//临时添加非结构化的值
		log.Errorw("Message printed with Errorw", "X-Request-ID", "fbf54504-64da-4088-9b86-67824a7fb508")
	*/
}
